﻿/*
 * This file is part of MonoStrategy.
 *
 * Copyright (C) 2010-2011 Christoph Husse
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Affero General Public License as
 *  published by the Free Software Foundation, either version 3 of the
 *  License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Authors: 
 *      # Christoph Husse
 * 
 * Also checkout our homepage: http://monostrategy.codeplex.com/
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using System.Globalization;
using System.Drawing;
using System.IO;
using System.ComponentModel;
using System.Drawing.Imaging;
using MonoStrategy.RenderSystem;

namespace MonoStrategy
{
    public class TerrainDefinitionEditor : TerrainDefinition
    {
        public TerrainDefinitionEditor() : base(64, new XMLTerrainConfig())
        {
        }

        public override float GetZShiftAt(int inXCell, int inYCell)
        {
            return 0;
        }

        public override bool CanBuildingBePlacedAt(int inXCell, int inYCell, BuildingConfig inConfig)
        {
            RuntimeBuildingEditor editor = ((RuntimeBuildingConfig)BuildingConfig).Building;

            foreach (var pos in editor.GroundPlane)
            {
                if (GetBuildingExpenses(pos.X + inXCell, pos.Y + inYCell) > 2)
                    return false;
            }

            foreach (var pos in editor.ReservedPlane)
            {
                if (GetBuildingExpenses(pos.X + inXCell, pos.Y + inYCell) > 2)
                    return false;
            }

            return true;
        }

        public override byte GetBuildingExpenses(int inXCell, int inYCell)
        {
            RuntimeBuildingEditor editor = ((RuntimeBuildingConfig)BuildingConfig).Building;

            if (editor.ShowBuildings)
            {
                Point pos = new Point(inXCell - editor.Position.X, inYCell - editor.Position.Y);

                if (editor.GroundPlane.Contains(pos))
                    return 5;
                else if (editor.ReservedPlane.Contains(pos))
                    return 3;
                else
                    return 2;
            }
            else if (editor.ShowSettlers)
            {
                Point pos = new Point(inXCell - editor.Position.X, inYCell - editor.Position.Y);

                if (editor.GroundPlane.Contains(pos))
                    return 3;
                else
                    return 2;
            }
            else
                return 1;
        }
    }
}
